const mongoose = require("mongoose");

/*-----------------------------------定义表格-------------------------------------*/

//定义表格
//mongoose.Schema({字段:类型})
const userSchema = new mongoose.Schema({
    //定义表格字段
    //自动生成id字段
    username: String,
    passage: String,
    age: Number,
    sex: {
        type: String,
        default: "男"  //默认值
    }
})

//创建node可操作表格的模型(用来操作表格,增删改查)
//mongoose.model("表格名","表格对象")
//在数据库中查找有没有名为 "user"的表格，如果没有就创建，有就使用表格的数据
const UserModel = mongoose.model("user",userSchema)

/*-----------------------------------新增-------------------------------------*/

//新增数据
let userInfo = new UserModel({
    username: "张三",
    passage: "123456",
    age: 20
})

//保存
userInfo.save()
.then(
    (result)=>{
        console.log(result)
        console.log("保存成功")
    },
    (error)=>{
        console.log(error)
        console.log("保存失败")
    }
)

/*------------------------------------查找------------------------------------*/

//查找所有
/*
UserModel.find()
.then(
    (result)=>{
        console.log(result)
    }
)
*/

//条件查找
UserModel.find({
    username:"lisi",
    sex: "女"
})
.then(
    (result)=>{
        console.log(result)
    }
)

//id查找
UserModel.findById("5b5da7fe916a961d887389af")
.then(
    (result)=>{
        console.log(result)
    }
)

//查找满足条件的第一个
UserModel.findOne({
    age: 20
})
.then(
    (result)=>{
        console.log(result)
    }
)

//number条件查询
/*
$gt 大于
$lt 小于
$gte 大于等于
$lte 小于等于
$ne 不等于
*/
UserModel.find({age:{$gt:40}})
.then(
    (result)=>{
        //打印出age大于40的数据
        console.log(result)
    }
)



//string正则匹配条件查询
let reg = new RegExp(/^张/);
UserModel.find({username:{$regex:reg}})
.then(
    (result)=>{
        //打印出username中“张”开头的数据
        console.log(result)
    }
)


//或查询  $or:[]
let reg1 = new RegExp(/李/);
UserModel.find({
    $or:[
        {username:{$regex:reg1}},
        {age:{$gt:30}}
    ]
})
.then(
    (result)=>{
        //打印出username中包含“李”  或者  age大于30  的数据
        console.log(result)
    }
)


//排序
//.sort()  -1降序  1升序
UserModel.find().sort({age:-1})//age降序
.then(
    (result)=>{
        result.map((item)=>{
            //遍历打印出排序完的age
            console.log(item.age)
        })
    }
)



/*------------------------------------修改------------------------------------*/

//根据条件修改
UserModel.update(
    //查找条件
    {username:"lisi"},
    //修改的值
    {age:58}
)
.then(
    (result)=>{
        console.log(result)
    }
)

//根据id修改
UserModel.findByIdAndUpdate(
    //查找id
    "5b5daf23cf709413140adf40",
    //修改的值
    {age:66}
)
.then(
    (result)=>{
        console.log(result)
    }
)

//修改满足条件的第一个
UserModel.findOneAndUpdate(
    //查找id
    {username:"张三"},
    //修改的值
    {age:45}
)
.then(
    (result)=>{
        console.log(result)
    }
)

/*------------------------------------删除------------------------------------*/

//根据条件删除满足条件的数据库
UserModel.remove(
    {username:"张三"}
)
.then(
    (result)=>{
        console.log(result)
    }
)

//根据id删除
UserModel.findByIdAndRemove(
    "5b5daf23cf709413140adf40"
)
.then(
    (result)=>{
        console.log(result)
    }
)

//删除修改满足条件的第一个
UserModel.findOneAndRemove(
    //查找id
    {username:"张三"},
    //修改的值
    {age:45}
)
.then(
    (result)=>{
        console.log(result)
    }
)

/*------------------------------------分页查询------------------------------------*/

//1、page页数  count数量(固定)
let page = 1;
let count = 5;
let skipVal = (page-1)*count;
UserModel.find().skip(skipVal).limit(count)
.then(
    (result)=>{
        console.log(result)
        //输出数据库中第1页的数据，每页5条数据
    }
)



//2、offset开始查询的下标  limit数量
let offset = 0;
let limit = 5;
UserModel.find().skip(offset).limit(limit)
.then(
    (result)=>{
        console.log(result)
        //输出数据库中第0条开始的5条数据
    }
)


//求数据总数
UserModel.count()
.then(
    (result)=>{
        //打印数据总数
        console.log(result)
        //计算页数
        let title = Math.ceil(result/count);
    }
)


//条件分页查询
/*
UserModel.find({"key":"value"}).skip(offset).limit(limit)
UserModel.where({"key":"value"}).find().skip(offset).limit(limit)
*/

